#!/bin/bash

# 开发环境配置脚本
# 用于初始化和配置开发环境

echo "🚀 开始配置开发环境..."

# 确保脚本在 backend 目录下运行
if [ ! -f "package.json" ]; then
  echo "❌ 错误: 请在 backend 目录下运行此脚本"
  exit 1
fi

# 检查环境依赖
echo "🔍 检查环境依赖..."

# 检查 Node.js
if ! command -v node &> /dev/null; then
  echo "❌ 未找到 Node.js"
  echo "请从 https://nodejs.org 下载并安装 Node.js (推荐 v16 或更高版本)"
  exit 1
fi

# 检查 npm
if ! command -v npm &> /dev/null; then
  echo "❌ 未找到 npm"
  echo "请检查 Node.js 安装是否完整"
  exit 1
fi

# 检查 PostgreSQL
if ! command -v psql &> /dev/null; then
  echo "⚠️  警告: 未找到 PostgreSQL 客户端工具"
  echo "建议安装 PostgreSQL 客户端:"
  echo "• Ubuntu/Debian: sudo apt-get install postgresql-client"
  echo "• macOS: brew install postgresql"
  echo "• Windows: 请从 PostgreSQL 官网下载安装程序"
fi

# 设置环境变量文件
echo -e "\n📝 配置环境变量..."
if [ ! -f ".env" ]; then
  if [ -f ".env.example" ]; then
    cp .env.example .env
    echo "✓ 已从 .env.example 创建 .env 文件"
  else
    echo "❌ 错误: 未找到 .env.example 文件"
    exit 1
  fi
fi

# 安装依赖
echo -e "\n📦 安装项目依赖..."
npm install

if [ $? -ne 0 ]; then
  echo "❌ 依赖安装失败"
  exit 1
fi

# 生成 Prisma 客户端
echo -e "\n🔧 生成 Prisma 客户端..."
npm run prisma:generate

if [ $? -ne 0 ]; then
  echo "❌ Prisma 客户端生成失败"
  exit 1
fi

# 设置文件权限
echo -e "\n🔒 设置文件权限..."
chmod +x scripts/*.sh
echo "✓ 已设置脚本执行权限"

# 创建必要的目录
echo -e "\n📁 创建项目目录..."
mkdir -p logs tmp backups
chmod 755 logs tmp backups
echo "✓ 已创建并设置目录权限"

# 初始化测试数据
echo -e "\n🌱 是否要初始化测试数据? (y/n)"
read -r answer

if [[ "$answer" =~ ^[Yy]$ ]]; then
  npm run seed:test

  if [ $? -ne 0 ]; then
    echo "❌ 测试数据初始化失败"
    exit 1
  fi
fi

echo -e "\n✅ 开发环境配置完成!"
echo -e "\n💡 后续步骤:"
echo "1. 检查并编辑 .env 文件中的配置"
echo "2. 运行 npm run dev 启动开发服务器"
echo "3. 访问 http://localhost:3000/api-docs 查看接口文档"

echo -e "\n📚 常用命令:"
echo "• npm run dev          - 启动开发服务器"
echo "• npm run test         - 运行测试"
echo "• npm run build        - 构建生产版本"
echo "• npm run seed:test    - 初始化测试数据"
echo "• npm run db:backup    - 备份数据库"
echo "• npm run db:restore   - 恢复数据库"

echo -e "\n🔧 开发工具推荐:"
echo "• VS Code"
echo "  - Prisma 插件"
echo "  - ESLint 插件"
echo "  - Prettier 插件"
echo "• Postman 或 Insomnia (API 测试)"
echo "• pgAdmin 或 DBeaver (数据库管理)"

echo -e "\n📝 文档链接:"
echo "• API 文档:    http://localhost:3000/api-docs"
echo "• 项目文档:    ./docs/README.md"
echo "• Prisma 文档: https://www.prisma.io/docs/"

echo -e "\n🎉 开发环境配置完成，祝您开发愉快！"
